今天要做的是記錄電影的功能,用於記錄目前所看過的電影,目前想要看的待播清單
先分享我的Xib所呈現的樣子
但我想呈現的情況其實是
那麼這時我需要的是一個三角形的圖形來幫助我呈現
所以我使用UIBeizerPath來處理這個情況
UIBezierPath可以用來畫一些圖形
使用UIBezierPath處理我這個情況其實很簡單
先在Cell內建立setupUI的func
func setupUI() {
let path = UIBezierPath()
// 建立起點
path.move(to: CGPoint(x: 0, y: 164))
// 建立路線1
path.addLine(to: CGPoint(x: 250, y: 164))
// 建立路線2
path.addLine(to: CGPoint(x: 250, y: 0))
let triangleLayer = CAShapeLayer()
triangleLayer.path = path.cgPath
triangleLayer.opacity = 0.5
maskForView.backgroundColor = .black
maskForView.layer.mask = triangleLayer
}
使用上述的程式碼會產生跟圖片上面相符的倒三角形,再使用configure去建立你的Cell,去處理照片要放哪一張就可以了
再處理CheckButton的問題,主要也是用兩個圖案去處理,定義不同狀況的情形實作
// RecordTableViewCell.swift
func configure(isSelected: Bool) {
if isSelected {
iconImageView.image = UIImage(systemName: "checkmark.circle.fill")
} else {
iconImageView.image = UIImage(systemName: "circle")
}
}
func didTapCell(isSelected: Bool) {
let checkStatus: Bool = !isSelected
configure(isSelected: checkStatus)
}
// RecordTableViewController.swift
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let data = viewModel.data[indexPath.row]
let cell: RecordTableViewCell = tableView.makeCell(indexPath: indexPath)
cell.configure(isSelected: data.isSelected)
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var data = viewModel.data[indexPath.row]
let cell: RecordTableViewCell = tableView.makeCell(indexPath: indexPath)
cell.didTapCell(isSelected: data.isSelected)
viewModel.data[indexPath.row].isSelected = !data.isSelected
tableView.reloadData()
}
這樣其實就可以實現Button點按不同的邏輯